home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / USERTRAC.D < prev    next >
Encoding:
Modula Definition  |  1989-03-10  |  1.8 KB  |  58 lines

  1. DEFINITION MODULE UserTrace;
  2.  
  3.   (*
  4.    * Von Thomas Tempelmann, August 1988, für Megamax Modula-2
  5.    *
  6.    * Dies ist ein alternatives Debug-Modul.
  7.    * Anstatt alle Zeilen, die mit (*$D+*) übersetzt wurden, anzuzeigen,
  8.    * kann eine Funktion im eigenen Programm erstellt werden, die regel-
  9.    * mäßig aufgerufen wird und Bedingungen prüft, worauf ggf. das feh-
  10.    * lerhafte Programm gestoppt werden kann, um die fehlerverursachende
  11.    * Stelle anzuzeigen.
  12.    * Achtung: Wird dieses Modul importiert, darf nicht 'Debug' importiert
  13.    * werden, da sich beide Module in ihrer Funktion gegenseitig ausschließen.
  14.    *)
  15.  
  16. TYPE    TraceProc = PROCEDURE (): BOOLEAN;
  17.  
  18. VAR     Stop: TraceProc;
  19.           (* Diese Funktion wird vor jeder mit $D+ übersetzten Zeile     *)
  20.           (* ausgeführt. Liefert diese Funktion TRUE, wird eine Scan-Box *)
  21.           (* angezeigt, von der aus das Programm verlassen werden kann.  *)
  22.  
  23. END UserTrace.
  24.  
  25. (* Beispielprogramm:
  26.  
  27.    Die Aufgabe ist es, herauszufinden, wann eine Variable einen illegalen
  28.    Wert zugewiesen bekommt. Hier sei dies der Fall, wenn der Wert 14 auf n
  29.    zugewiesen wird (im Beispiel ist das natürlich nicht wirklich ein
  30.    Fehler, es soll nur daran die Funktion erläutert werden).
  31.  
  32.   MODULE Fehler;
  33.  
  34.   (*$ D+  Debug-Modus einschalten *)
  35.  
  36.   IMPORT UserTrace;
  37.  
  38.   VAR n: CARDINAL;  (* diese Variable ist zu überwachen *)
  39.  
  40.   PROCEDURE add (i: CARDINAL);
  41.     BEGIN
  42.       n:= n + i;
  43.       IF i > 0 THEN add (i-1) END
  44.     END add;
  45.  
  46.   PROCEDURE stop (): BOOLEAN;
  47.     BEGIN
  48.       RETURN (n = 14)   (* stoppe, wenn der gesuchte Wert in 'n' steht *)
  49.     END stop;
  50.  
  51.   BEGIN
  52.     UserTrace.Stop:= stop;
  53.     n:= 1;
  54.     add (3);  (* 3, 2, 1 auf n addieren *)
  55.     add (4);  (* 4, 3, 2, 1 auf n addieren *)
  56.   END Fehler.
  57. *)